import { request } from '@/utils/http';
import { newGuid } from '@/utils/guid';

/**
 * 登录请求参数
 */
export interface LoginParams {
  username: string;
  password: string;
}

/**
 * 登录响应数据
 */
export interface LoginResult {
  token?: string;
  userInfo: {
    FMID: string;      // 用户ID
    FCODE: string;     // 用户代码
    FNAME: string;     // 用户名称
    FTNID: string;     // 租户ID
  };
}

/**
 * 用户登录
 * @param params 登录参数
 */
export function login(params: LoginParams): Promise<LoginResult> {
  const requestId = newGuid();

  return request<any>({
    metaid: '{_sys.login_}',
    table: 'TSYS_USER',
    caption: '登录查询',
    kind: 'query',
    edit: [],
    execute: [],
    query: {
      data: {
        FCODE: params.username,
        FPWD: params.password,
        FREQID: requestId,
      },
    },
  }).then((res) => {
    // 响应格式：{"data":[{"metaid":"{_sys.login_}","rows":[{...}]}]}
    // 注意：即使用户名或密码错误，后端也返回 code: "0"，但 rows 为空数组
    if (res && res.length > 0 && res[0].rows) {
      if (res[0].rows.length > 0) {
        // 登录成功，返回用户信息
        const userInfo = res[0].rows[0];
        return {
          userInfo,
        };
      } else {
        // rows 为空数组，说明用户名或密码错误
        throw new Error('用户名或密码错误');
      }
    }
    // 其他异常情况
    throw new Error('登录失败，请稍后重试');
  });
}

/**
 * 退出登录
 */
export function logout(): Promise<void> {
  return request({
    metaid: '_sys_logout_',
    caption: '退出登录',
    kind: 'execute',
    data: {},
  });
}

/**
 * 获取用户信息
 */
export function getUserInfo(): Promise<any> {
  return request({
    metaid: '_sys_user_info_',
    caption: '获取用户信息',
    kind: 'query',
    data: {},
  });
}

/**
 * 获取用户菜单
 */
export function getUserMenus(): Promise<any[]> {
  return request<any[]>({
    metaid: '_sys_user_menus_',
    caption: '获取用户菜单',
    kind: 'query',
    data: {},
  });
}
